package com.test.reader;

import com.test.registry.BeanDefinitionRegistry;
import com.test.resource.Resource;
import com.test.resource.ResourceLoader;

/**
 * Bean定义读取器接口，用于加载Bean定义并注册到Bean定义注册表中
 * 该接口主要负责从不同来源（如文件、网络等）读取Bean定义，并将其解析和注册到容器中
 */
public interface BeanDefinitionReader {

    /**
     * 获取Bean定义注册表
     *
     * @return BeanDefinitionRegistry 实例，用于注册和管理Bean定义
     */
    BeanDefinitionRegistry getRegistry();

    /**
     * 获取资源加载器
     *
     * @return ResourceLoader 实例，用于加载资源文件
     */
    ResourceLoader getResourceLoader();

    /**
     * 从给定的资源中加载Bean定义
     *
     * @param resource 资源对象，包含Bean定义
     * @throws Exception 如果加载过程中发生错误
     */
    void loadBeanDefinitions(Resource resource) throws Exception;

    /**
     * 从给定的资源数组中加载Bean定义
     *
     * @param resources 资源对象数组，包含Bean定义
     * @throws Exception 如果加载过程中发生错误
     */
    void loadBeanDefinitions(Resource... resources) throws Exception;

    /**
     * 从给定的资源位置加载Bean定义
     *
     * @param location 资源的位置，如文件路径或URL
     * @throws Exception 如果加载过程中发生错误
     */
    void loadBeanDefinitions(String location) throws Exception;

    /**
     * 从给定的资源位置数组中加载Bean定义
     *
     * @param locations 资源位置数组，如文件路径或URL
     * @throws Exception 如果加载过程中发生错误
     */
    void loadBeanDefinitions(String... locations) throws Exception;
}
